package com.tjh.webflux.annotationWebFluxday43.controller;

import com.tjh.webflux.annotationWebFluxday43.entity.User;
import com.tjh.webflux.annotationWebFluxday43.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

/**
 * day42：
 *      SpringWebflux（基于注解编程模型）
 *      测试：启动 WebfluxApplication
 * Create by koala on 2022-11-13
 */
@RestController
public class UserController {

    //注入service
    @Autowired
    private UserService userService;

    /**
     * id查询
     *      测试（浏览器打开）：http://localhost:8081/user/1
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    public Mono<User> geetUserId(@PathVariable int id) {
        return userService.getUserById(id);
    }

    /**
     * 查询所有
     *      测试（浏览器打开）：http://localhost:8081/list
     * @return
     */
    @GetMapping("/list")
    public Flux<User> getUsers() {
        return userService.getAllUser();
    }

    /**
     * 添加
     *      测试（使用postman）：
     *          url：http://localhost:8081/saveUser
     *          请求方式：post
     *          参数：
     *              {
     *                  "name": "koala",
     *                  "gender": "nan",
     *                  "age": 20
     *              }
     * @param user
     * @return
     */
    @PostMapping("/saveUser")
    public Mono<Void> saveUser(@RequestBody User user) {
        Mono<User> userMono = Mono.just(user);
        return userService.saveUserInfo(userMono);
    }
}
